Deep and Structured - L2 Notes(下)

Contents

  1. 1. Neural Network (Basic Ideas)
    1. 1.1. How to pick the “Best” function
      1. 1.1.1. Gradient Descent
      2. 1.1.2. Gradient Descent 的原理
    2. 1.2. Practical Issues
      1. 1.2.1. Learning Rate
      2. 1.2.2. Stochastic Gradient Descent
      3. 1.2.3. Mini-batch Gradient Descent
      4. 1.2.4. Recipe for Learning
    3. 1.3. 總結

Neural Network (Basic Ideas)

How to pick the “Best” function

現在的問題點是要如何找到一組 parameter 來讓 $C(\theta)$ 最小。這邊採用的方法是 Gradient Descent

Gradient Descent

先簡化一下 parameter ,變成只有一個變數。其想法就是,對某點作 微分 後得到其斜率,再依據斜率決定要如何 移動 點。

如果斜率為負: 將點往右移
如果斜率為正: 將點往左移

$\theta^0$ 要加上 斜率乘 $- \eta$ 。如果斜率為負,要往右移,所以要加負號。反之則是往左。(斜率取絕對值後,值越大代表直線越陡峭)
至於 $\eta$ 則是指 learning rate。(移動的距離有多寬)

目的是要找一個點使的 $C(\theta)$ 為 local minimum

2-44

接著來看如果一組 parameter 內有 兩個變數 的話:

$\theta$ 的 上標 代表第幾組 parameter,下標(1,2) 則是變數(兩個)。

梯度($\nabla$) 對兩個變數去做 偏微分,算出來的結果一樣是 2 維的 vector。
接著就是去找下一個點 => Update Parameter ,寫成式子如下圖:

2-45

用圖來表示這一連串的操作就會是這樣:

loop: 計算 Gradient $\nabla$ -> 移動點

直到 Gradient 的 norm($\nabla C(\theta)$) 算出來接近零才停。

2-46

關於倒三角這個符號,向量微分算子

Gradient Descent 的原理

同樣是以兩個變數為例,在下圖中線上的數字代表著 $C(\theta)$ 的值,而圖中的點就是每次 update 的 parameter。

而我們可以做到的事是: 給我一個點,可以知道這個點 附近 的 $C(\theta)$ 最小值 是在哪一點。
所以我們就一直往這個會使 $C(\theta)$ 變小的地方邁進,最後就會走到 local minimum
這邊所謂的 附近 ,就如同圖中的紅圈一樣。有個有趣的比喻: 就像是 戰爭迷霧,我們只能看到自己視野內的東西。

2-47

至於怎麼看視野內的東西呢?這邊提到了 Taylor Series ,大致上就是當 $x = x_0$ ,且可微無限多次時,這個函數可以寫成圖中的 $h(x)$ 。(Taylor Series)

然後當 $x_0$ 和 $x$ 很接近時, $(x-x_0)^k$ 的項後面會越來越小,所以我們可以只看它的前兩項。

2-48

拓展到兩個變數:

2-50

而根據 Taylor Series ,當我們有一點 $(a,b)$ 時,如果 紅色圈圈 的範圍很小(也就是跟 $(a,b)$ 很接近),那在這範圍內的 $\theta = \{ \theta_1,\theta_2 \}$ ,其 $C(\theta)$ 可以寫成圖中那樣:

更進一步來說,對於 偏微分 的那兩項,當 $C(\theta)$ 偏微分完後再帶入 $(a,b)$ ,它們也就只是個 常數( $u$ 和 $v$ ) 了,所以可以再進一步的簡化。
($s$ 裡漏打 $a$)

2-51

有了這個式子後,我們可以輕易地找到,使這個紅圈範圍內 $C(\theta)$ 值最小的 $(\theta_1,\theta_2)$ 。
(至於如何求出 $\theta_1,\theta_2$ ,影片中是說自己設個範圍,然後找)
而最後解出來的式子如下圖:

2-52

可以看到圖中 $(u,v)$ 向量其實就是前面所講的 $\nabla C(a,b)$

learning rate 就是這個 紅色圈圈 的半徑,也就是為甚麼會有前面所說 戰爭迷霧 的問題了,因為如果 $\eta$ 設 太大,這個式子就不成立了。(在 Taylor Series 中二次項的部分也不能被刪除)
反過來說,如果 $\eta$ 無窮小,順著 gradient 的方向,我們就一定能讓 Cost 變小。

而這也帶出一件事,如果我們把 Taylor Series 中的二次項加進訓練的過程,通常可以提升訓練的效果,但也會增加額外的運算量。

Practical Issues

Learning Rate

對於如何設定 learning rate ,以後會在深談。這邊只先講講它的影響:
當太大時,有可能找不到我們要的,會發生來回震盪或直接飛出去的狀況。
當很小時,只要花的時間夠久都可以找到。(非常久~~)

2-58

2-61

Stochastic Gradient Descent

先來簡化一下,原先在 cost function 內,需要用每一筆資料和 $\hat{y}^r$ 做計算,這邊把每一筆簡化成 $C^r(\theta)$

對於前面所提的 gradient descent ,在每次 update 時需要對全部的資料都算一次,再做 sum。(實際上這樣不太行)

這邊要提的叫做 Stochastic Gradient Descent :
每次 update 時 ,我們只 挑一筆 資料來看 $x^r$。

只要 update 得夠多次,期望值算出來其實是一樣的,那這樣的好處是什麼?

2-62

要先解釋一個名詞 epoch : 把所有的 examples 都看過一次後叫 epoch。

2-63

接著來看看好處。
從下方這張圖可以看出,如果有 20 個 example ,原先的 Gradient Descent 要看完全部才會更新,此時 Stochastic Gradient Descent 就已經更新 20 次了。

2-64

Mini-batch Gradient Descent

實作上還有另一個方法,介於 Stochastic Gradient Descent 和 Gradient Descent 之間的就叫 Mini-batch Gradient Descent

做法是,每次挑選 B 個 example 來計算,B 就是 batch 的大小。 (Stochastic Gradient Descent 其實也就是 $B = 1$ 的情況)

要注意的地方是要 shuffle data ,因為我們希望所選出來的資料是有各式各樣類型的。

2-65

這邊有個比較,紅線是訓練時間(看右邊的軸),藍線是精準度(看左邊的軸)。
(全部的 example 都看就是正常 Gradient Descent)

2-66

Recipe for Learning

這邊主要講解一下在實際練習時會遇到的問題。

2-68

如果在 training data 的部分時就沒有好的結果:

2-70

2-71

關於 Overfitting 的小解釋 維基百科:

我們從 training data 中得出的 best parameter ,並不代表我們在 test data 上也是如此適用。有可能因為過度符合 training data 導致在 test data 中有不好的結果。(可增加 training data 來解決)

2-72

總結

2-74